les programmes R : Excel Killer ?

AfromapR Bouaké 2025

Auteur·rice

Claude Grasland & Jean-Paul Nguesso

Date de publication

2025-05-27

Excel
Télécharger l’exercice

Objectif

Le but de ce chapitre est de montrer le plus tôt possible aux étudiants l’intérêt de réaliser des programmes R et de remplacer les logiciels de bureautique comme Excel ou Libre office par un environnement de travail plus intégré et plus performant… à condition d’oublier la souris pour revenir au clavier !

Projet R

Si l’on veut s’épargner bien des désagréments dans l’apprentissage de R, il faut prendre dès le départ de bonnes habitudes. Parmi celles-ci, l’une des plus importantes est le fait d’inscrire toujours son travail dans le cadre d’un projet R c’est-à-dire - en simplifiant beaucoup - un répertoire de travail contenant l’ensemble des données, programmes, résultats… que l’on pourra par la suite compresser, archiver et transmettre à quelqu’un d’autre.

Lancement de R studio

Sauf à être complètement masochiste, on n’utilise jamais R directement mais on lance d’abord l’interface R-Studio qui facilite conisdérablement l’ensemble des opérations et offre une gamme considérable de services. Il ne faut toutefois pas confondre les deux et il serait par exemple ridicule d’indiquer sur un CV en vue d’un emploi de statisticien que l’on sait utiliser R-studio en oubliant de préciser que l’on maîtrise R.

Création d’un projet

Pour créer un projet on utilise le menus déroulant File/new project/ … et on définit un dossier de notre ordinateur (existant ou à créer) qui contiendra le projet. Une fois l’opération effectuée, on pourra constater que ce dossier contient un fichier xxx.Rproj ou xxx est en principe le nom du dossier dans lequel vous avez stocké le projet.

Ce fichier contient toute une série d’informations dont nous ne parlerons pas dans ce cours d’initiation mais qui, pour faire simple, définissent un ensemble de réglages du logiciel et de préférences de l’utilisateur.

Si vous fermez Rstudio (faites-le !) il vous suffira pour reprendre votre travail là où vous vous étiez arrêté :

  • de lancer R-studio et de cliquer sur File/open project/… suivi du nom du fichier xxx.Rproj
  • ou plus simplement encore de double cliquer sur le fichier xxx.Rproj ce qui lancera automatiquement Rstudio

Le dossier contenant votre projet R peut être organisé à votre convenance. Certains mettent tout les fichier pêle-mêle dans le dossier. D’autres préfèrent créer des sous-dossiers contenant des données, des programmes, des résultats, des figures. Vous déciderez à l’usage de ce qui vous convient le mieux, mais le point important est que tout ce qui entre ou sort de vos programmes R doit être de préférence stocké dans le répertoire du projet.

Programme R

La fonction initiale d’un langage de programmation comme R est … de créer des programmes c’est-à-dire des ensembles d’instruction permettant d’accomplir une tâche à l’intérieur d’une chaîne de production. Dans le cas d’un logiciel spécialisé dans l’analyse statistique, il s’agira donc de partir de données (statistiques, géographiques, textuelles, …) pour aboutir à des résultats prenant la forme de tableaux, cartes ou graphiques. Il ne s’agit donc en somme que d’une étape du travail de recherche où le principal avantage de R est d’automatiser une tâche et de faciliter sa reproduction ultérieure avec en arrière plan un objectif de productivité puisque l’ordinateur réalise en quelques millisecondes des tâches qui prendraient des heures avec un logiciel click-bouton de type Excel.

Programme R

Comparer R et Excel

Prenons comme exemple la création d’un rapport sur l’évolution des inégalités régionales de développement dans les pays d’Afrique. On dispose pour cela d’une très grande base de donnée produite par le Global Data Lab qui fournit à la fois des données statistiques et des fonds de carte pour chaque pays d’Afrique en 1992, 2002, 2012 et 2022.

Deux candidats se présentent pour le poste :

  • Le candidat A est un expert dans la manipulation du package Microsoft Office (Excel, Word, Power Point, …) avec plus de 30 ans d’expérience. Il maîtrise également ArcGis pour faire des cartes qu’il retouche ensuite avec Adobe Illustrator.

  • Le candidat B est un étudiant de Master ayant suivi une formation à R et Rstudio ainsi qu’au logiciel de cartographie Magrit.

L’auteur du rapport décide de les mettre en concurrence pour voir lequel des deux candidats est le plus efficace et prépare une série d’épreuves qui seront chronométrées.

Comment passer du clic à la programmation ?
  • La plupart des étudiants ou des enseignants de sciences sociales ont appris très tôt à utiliser des logiciels fonctionnant avec une souris et un écran sur lequel on doit cliquer sur des menus. C’est par exemple le cas dans Excel, Stata, ArcGis, Word …

  • Avec R il faut apprendre à rédiger des programmes en se servant presqu’uniquement du clavier et en rédigeant des instructions dans un langage qui n’est pas facile à comprendre au début.

  • Organiser une compétition entre logiciels est sans doute la façon la plus efficace de convaincre les personnes habituées aux logiciels click-bouton de passer à la programmation. Il faut montrer que la programmation est plus rapide, plus efficace et surtout reproductible.

Etape 1 : Importation du tableau de données

Objectif de l’étape

Au cours de cette étape vous allez …

  1. Importer un tableau de l’ensemble des pays africains en 2022 qui se trouve dans le fichier don_reg_2022.csv qui se trouve dans le dossier africa_GDL/data/.

  2. Sélectionner des lignes correspondant à la Côte d’Ivoire.

  3. Sélectionner les colonnes correspondant aux variables pays, région, pop, pib_hab et esp_vie.

  4. Afficher le tableau résultant de ces opérations

Solution Excel

On importe le fichier. Excel

Puis on supprime des lignes et des colonnes en se servant de la souris.

Excel

Solution R

On crée un programme R avec File/New File/R Script puis on l’enregistre avec File/Save/ … suivi du nom du programme.

On rédige ensuite des lignes de code correspondant à chacune des opérations demandées

# ETAPE1 : préparation des données

## 1.1 Importation du tableau
don <- read.table(file = "data/africa_GDL/data/don_reg_2022.csv",
                  header= TRUE,
                  dec=",",
                  sep =";")

## 1.2 Sélection du pays
sel <- don[don$iso_code=="CIV",]

## 1.3 Sélection des variables
sel <-sel[, c("country","region","pop","pib_hab","esp_vie")]

## 1.4 Affichage du tableau
sel
         country             region  pop pib_hab esp_vie
59 Cote d'Ivoire            Abidjan 5984    9600    61.3
60 Cote d'Ivoire       Yamoussoukro  245    7990    61.8
61 Cote d'Ivoire      Bas Sassandra 1160    3900    59.9
62 Cote d'Ivoire              Comoe 1642    5860    63.9
63 Cote d'Ivoire           Denguele  836    5240    51.6
64 Cote d'Ivoire        Goh-Djiboua 1504    4890    60.4
65 Cote d'Ivoire               Lacs 2409    4380    58.1
66 Cote d'Ivoire            Lagunes 2245    4830    61.6
67 Cote d'Ivoire          Montagnes 2994    3480    55.6
68 Cote d'Ivoire Sassandra-Marahoue 3541    4210    57.8
69 Cote d'Ivoire            Savanes 1376    4180    57.3
70 Cote d'Ivoire  Vallee du Bandama 1140    5400    59.9
71 Cote d'Ivoire             Woroba 1259    3790    53.5
72 Cote d'Ivoire             Zanzan 1829    3910    61.4
Résultat de l’étape

A priori, la solution Excel est plus rapide.

Etape 2 : Calcul de la population du pays

Objectif de l’étape

On souhaite calculer la population totale du pays en effectuant la somme de la colonne population.

Solution Excel

On se place en bas de la colonne pop et on écrit =SOMME() puis on sélectionne les cases avec la souris.

Excel

Solution R

On tape juste une commande avec la fonction sum() et le nom de la variable

## ETAPE 2 : Poids du pyas

sum(sel$pop)*1000
[1] 28164000
Résultat de l’étape

Les deux solutions sont aussi rapides l’une que l’autre

Etape 3 : Calcul des paramètres principaux

Objectif de l’étape

On veut calculer les paramètres statistiques principaux des variables pop, pib_hab et esp_vie (moyenne, médiane, minimum, maximum, quartiles)

Solution Excel

On tape plusieurs fonctions pour effectuer chacun des calculs demandés en bas de l’une des colonnes. Puis on les recopie pour avoir les résultats des autres colonnes.

Excel

Solution R

On tape juste la fonction summary()pour résumer tout le tableau.

## ETAPE 3 : Paramètres principaux
summary(sel)
   country             region               pop          pib_hab    
 Length:14          Length:14          Min.   : 245   Min.   :3480  
 Class :character   Class :character   1st Qu.:1185   1st Qu.:3978  
 Mode  :character   Mode  :character   Median :1573   Median :4605  
                                       Mean   :2012   Mean   :5119  
                                       3rd Qu.:2368   3rd Qu.:5360  
                                       Max.   :5984   Max.   :9600  
    esp_vie     
 Min.   :51.60  
 1st Qu.:57.42  
 Median :59.90  
 Mean   :58.86  
 3rd Qu.:61.38  
 Max.   :63.90  
Résultat de l’étape

R est beaucoup plus rapide qu’Excel. Mais on trouve les mêmes fonctionalités dans des logiciels comme stata ou spss.

Etape 4 : Distribution de X

Objectif de l’étape

On veut connaître la forme de la distribution du PIB par habitant pour savoir si elle est symétrique ou dissymétrique, unimodale ou bimodale et si elle comporte des valeurs exceptionnelles.

Solution Excel

Excel ne sait pas faire des histogrammes directement. Il faut donc créer des classes ce qui est très compliqué (voir ici). Puis faire un diagramme en colonne mais qui sera en général faux si les classes sont d’amplitudes inégales.

Excel

Solution R

La fonction hist() permet de connaître rapidement la forme d’une distribution et fournit un histogramme juste.

hist(sel$pib_hab, 
     breaks = c(3000,4000, 5000, 7000, 10000),
     main = "Histogramme",
     xlab = "PIB par habitant")

On peut évidemment améliorer ensuite les figures si l’on souhaite. Voici par exemple un programme pour combiner un histogramme, un diagramme de distribution et une densité de probabilité.

## ETAPE 4 :Histogramme et boxplot de X

X<- sel$pib_hab
hist(X, 
     main="Histogramme",
     breaks = quantile(X,probs = c(0,0.25,0.5,0.75,1)),
     ylab= "Densité",
     xlab = "X = PIB par habitant",
     probability = T,
     col= "lightyellow",
      )
rug(X, 
    col="blue",
    lwd=3)
lines(density(X, bw=sd(X)/2),
      col="red",
      lwd=2,
      )

Résultat de l’étape

R permet d’obtenir rapidement la réponse à la question mais la construction d’une belle figure prend du temps et semble difficile pour le débutant.

Etape 5 : Distribution de Y

Objectif de l’étape

On veut calculer un histogramme de l’espérance de vie.

Solution Excel

On reprend toutes les étapes précédentes ce qui demande beaucoup de clics.

Solution R

On recopie le programme et on modifie juste le choix de la variable et le titre.

## ETAPE 5 : Histogramme de Y

Y <- sel$esp_vie
hist(Y, 
     main="Histogramme",
     breaks = quantile(Y,probs = c(0,0.25,0.5,0.75,1)),
     ylab= "Densité",
     xlab = "Y = Espérance de vie",
     probability = T,
     col= "lightyellow",
      )

rug(Y, 
    col="blue",
    lwd=3)

lines(density(Y, bw=sd(Y)/2),
      col="red",
      lwd=2,
      )

Résultat de l’étape

Nous avons eu du mal à rédiger le premier programme. Mais désormais il suffit de le modifier légèrement pour l’appliquer à une autre variable.

Etape 6 : Diagramme croisant X et Y

Objectif de l’étape

On veut construit un diagramme croisant le pib par habitangt (variable explicative) et l’espérance de vie (variable à expliquer) afin de visualiser l’existence éventuelle d’une relation. Ajouter si possible le nom des régions

Solution Excel

On choisit le menu Graphique et on sélectionne le type “XY”.

Excel

Puis, si on connaît bien Excel on ajoute des étiquettes pour avoir le nom des régions.

Solution R

On utilise la fonction plot() et on lui indique le nom des deux variables.

plot(sel$pib_hab,sel$esp_vie)

On peut ensuite améliorer le résultat en ajoutant des titres aux axes, en modifiant la forme et la couleur des points, en ajoutant une grille, etc.

## ETAPE 6 : Relation entre X et Y 

plot(sel$pib_hab,sel$esp_vie,
     xlab = "X : PIB par habitant",
     ylab = "Y : Espérance de vie",
     main = "Relation entre X et Y",
     pch=20,
     col="red")

text(sel$pib_hab,sel$esp_vie,sel$region,
     cex=0.4,
     col="blue",
     pos=1)

grid()

Résultat de l’étape

Excel semble plus simple d’utilisation mais en réalité faire un graphique prend beaucoup de temps. Les graphiques R sont assez faciles à maîtriser avec un peu d’habitude et on peut les exporter en haute définiton (.pdf). Il existe par ailleurs des packages graphiques très puissants dans R comme ggplot2.

ETAPE 7 : Relation entre X et Y

Objectif de l’étape

On veut mesurer la corrélation entre les variables X et Y puis tester si elle est significative. Puis calculer l’equation de la droite de régression Y = aX+b et la tracer sur le graphique.

Solution dans Excel

Pour la corrélation on peut utiliser la fonction COR. Pour la droite de régression, on peut effectuer un clic sur le graphique XY et demander d’ajouter la droite de régression et son équation.

Excel

Par contre il n’y a pas de test prévu pour savoir si la relation est significative.

Solution dans R

Les fonctions cor(), cor.test() et lm() permettent respectivement de mesurer la corrélation, la tester et calculer la droite de régression.

## ETAPE 7 : Test de la relation entre X et Y

## 7.1 Corrélation
cor(sel$pib_hab,sel$esp_vie)
[1] 0.419697
## 7.2 Test de significativité
cor.test(sel$pib_hab,sel$esp_vie)

    Pearson's product-moment correlation

data:  sel$pib_hab and sel$esp_vie
t = 1.6018, df = 12, p-value = 0.1352
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.1426476  0.7772062
sample estimates:
     cor 
0.419697 
## 7.3 Régression
modreg<-lm(esp_vie~pib_hab,data=sel)
summary(modreg)

Call:
lm(formula = esp_vie ~ pib_hab, data = sel)

Residuals:
    Min      1Q  Median      3Q     Max 
-7.3661 -1.1858  0.1915  1.9750  4.4140 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 5.457e+01  2.818e+00  19.369 2.03e-10 ***
pib_hab     8.385e-04  5.235e-04   1.602    0.135    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 3.259 on 12 degrees of freedom
Multiple R-squared:  0.1761,    Adjusted R-squared:  0.1075 
F-statistic: 2.566 on 1 and 12 DF,  p-value: 0.1352
## 7.4 Graphique + droite de régression


plot(sel$pib_hab,sel$esp_vie,
     xlab = "X : PIB par habitant",
     ylab = "Y : Espérance de vie",
     main = "Relation entre X et Y",
     pch=20,
     col="red")

text(sel$pib_hab,sel$esp_vie,sel$region,
     cex=0.4,
     col="blue",
     pos=1)

grid()

abline(modreg, col="black",lwd=2)

Résultat de l’étape

Même si on est un expert en Excel, il est difficile de produire des résultats aussi précis que ceux fournis par R qui est le meilleur logiciel de statistique au monde.

Efficacité et reproductibilité

Mais le véritable avantage de R réside dans la possibilité de réutiliser à plusieurs reprises un même programme en changeant juste les données iniiales

Changement de date

On reprend tout notre programme et on remplace juste le fichier don_reg_2022.csv par le fichier don_reg_2012.csv qui fournit les mêmes données mais pour l’année 2012 au lieu de 2022.

# ETAPE1 : préparation des données

## 1.1 Importation du tableau
don <- read.table(file = "data/africa_GDL/data/don_reg_2012.csv",
                  header= TRUE,
                  dec=",",
                  sep =";")

## 1.2 Sélection du pays
sel <- don[don$iso_code=="CIV",]

## 1.3 Sélection des variables
sel <-sel[, c("country","region","pop","pib_hab","esp_vie")]

## 1.4 Affichage du tableau
sel

## ETAPE 2 : Poids du pyas

sum(sel$pop)*1000

## ETAPE 3 : Paramètres principaux
summary(sel)


## ETAPE 4 :Histogramme et boxplot de X

X<- sel$pib_hab
hist(X, 
     main="Histogramme",
     breaks = quantile(X,probs = c(0,0.25,0.5,0.75,1)),
     ylab= "Densité",
     xlab = "X = PIB par habitant",
     probability = T,
     col= "lightyellow",
      )
rug(X, 
    col="blue",
    lwd=3)
lines(density(X, bw=sd(X)/2),
      col="red",
      lwd=2,
      )

## ETAPE 5 : Histogramme de Y

Y <- sel$esp_vie
hist(Y, 
     main="Histogramme",
     breaks = quantile(Y,probs = c(0,0.25,0.5,0.75,1)),
     ylab= "Densité",
     xlab = "Y = Espérance de vie",
     probability = T,
     col= "lightyellow",
      )

rug(Y, 
    col="blue",
    lwd=3)

lines(density(Y, bw=sd(Y)/2),
      col="red",
      lwd=2,
      )

## ETAPE 6 : Relation entre X et Y 

plot(sel$pib_hab,sel$esp_vie,
     xlab = "X : PIB par habitant",
     ylab = "Y : Espérance de vie",
     main = "Relation entre X et Y",
     pch=20,
     col="red")

text(sel$pib_hab,sel$esp_vie,sel$region,
     cex=0.4,
     col="blue",
     pos=1)

grid()


## ETAPE 7 : Test de la relation entre X et Y

## 7.1 Corrélation
cor(sel$pib_hab,sel$esp_vie)

## 7.2 Test de significativité
cor.test(sel$pib_hab,sel$esp_vie)

## 7.3 Régression
modreg<-lm(esp_vie~pib_hab,data=sel)
summary(modreg)

## 7.4 Graphique + droite de régression


plot(sel$pib_hab,sel$esp_vie,
     xlab = "X : PIB par habitant",
     ylab = "Y : Espérance de vie",
     main = "Relation entre X et Y",
     pch=20,
     col="red")

text(sel$pib_hab,sel$esp_vie,sel$region,
     cex=0.4,
     col="blue",
     pos=1)

grid()

abline(modreg, col="black",lwd=2)
         country             region  pop pib_hab esp_vie
59 Cote d'Ivoire            Abidjan 4677    4650    59.6
60 Cote d'Ivoire       Yamoussoukro  191    4590    63.4
61 Cote d'Ivoire      Bas Sassandra  907    2200    57.5
62 Cote d'Ivoire              Comoe 1283    2720    58.9
63 Cote d'Ivoire           Denguele  653    2850    50.8
64 Cote d'Ivoire        Goh-Djiboua 1176    2240    57.3
65 Cote d'Ivoire               Lacs 1883    2220    56.8
66 Cote d'Ivoire            Lagunes 1755    2490    57.8
67 Cote d'Ivoire          Montagnes 2340    1810    53.3
68 Cote d'Ivoire Sassandra-Marahoue 2768    2080    56.5
69 Cote d'Ivoire            Savanes 1076    2230    56.1
70 Cote d'Ivoire  Vallee du Bandama  891    2720    56.7
71 Cote d'Ivoire             Woroba  984    1720    51.5
72 Cote d'Ivoire             Zanzan 1430    1980    56.3
[1] 22014000
   country             region               pop            pib_hab    
 Length:14          Length:14          Min.   : 191.0   Min.   :1720  
 Class :character   Class :character   1st Qu.: 926.2   1st Qu.:2110  
 Mode  :character   Mode  :character   Median :1229.5   Median :2235  
                                       Mean   :1572.4   Mean   :2607  
                                       3rd Qu.:1851.0   3rd Qu.:2720  
                                       Max.   :4677.0   Max.   :4650  
    esp_vie     
 Min.   :50.80  
 1st Qu.:56.15  
 Median :56.75  
 Mean   :56.61  
 3rd Qu.:57.73  
 Max.   :63.40  

[1] 0.6596345

    Pearson's product-moment correlation

data:  sel$pib_hab and sel$esp_vie
t = 3.0403, df = 12, p-value = 0.01027
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.1985427 0.8816475
sample estimates:
      cor 
0.6596345 

Call:
lm(formula = esp_vie ~ pib_hab, data = sel)

Residuals:
   Min     1Q Median     3Q    Max 
-6.370 -1.138  1.101  1.523  2.201 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 5.057e+01  2.096e+00   24.12 1.55e-11 ***
pib_hab     2.316e-03  7.617e-04    3.04   0.0103 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.514 on 12 degrees of freedom
Multiple R-squared:  0.4351,    Adjusted R-squared:  0.388 
F-statistic: 9.243 on 1 and 12 DF,  p-value: 0.01027

Changement de pays

On remplace reprend la date de 2022 mais on remplace la Côte d’Ivoire (CIV) par le Nigéria (NGA)

# ETAPE1 : préparation des données

## 1.1 Importation du tableau
don <- read.table(file = "data/africa_GDL/data/don_reg_2022.csv",
                  header= TRUE,
                  dec=",",
                  sep =";")

## 1.2 Sélection du pays
sel <- don[don$iso_code=="NGA",]

## 1.3 Sélection des variables
sel <-sel[, c("country","region","pop","pib_hab","esp_vie")]

sel

## ETAPE 2 : Somme des populations

sum(sel$pop)*1000

## ETAPE 3 : Paramètres principaux
summary(sel[,c("pop","pib_hab","esp_vie")])

## ETAPE 4 :Histogramme de X

X<- sel$pib_hab
hist(X, 
     main="Histogramme",
     breaks = quantile(X,probs = c(0,0.25,0.5,0.75,1)),
     ylab= "Densité",
     xlab = "X = PIB par habitant",
     probability = T,
     col= "lightyellow",
      )

rug(X, 
    col="blue",
    lwd=3)

lines(density(X, bw=sd(X)/2),
      col="red",
      lwd=2,
      )

## ETAPE 5 : Histogramme de Y

Y <- sel$esp_vie
hist(Y, 
     main="Histogramme",
     breaks = quantile(Y,probs = c(0,0.25,0.5,0.75,1)),
     ylab= "Densité",
     xlab = "Y = Espérance de vie",
     probability = T,
     col= "lightyellow",
      )

rug(Y, 
    col="blue",
    lwd=3)

lines(density(Y, bw=sd(Y)/2),
      col="red",
      lwd=2,
      )

## ETAPE 6 : Relation entre X et Y 

plot(sel$pib_hab,sel$esp_vie,
     xlab = "X : PIB par habitant",
     ylab = "Y : Espérance de vie",
     main = "Relation entre X et Y",
     pch=20,
     col="red")
text(sel$pib_hab,sel$esp_vie,sel$region,
     cex=0.4,
     col="blue",
     pos=1)



## ETAPE 7 : Test de la relation entre X et Y

## 7.1 Corrélation
cor(sel$pib_hab,sel$esp_vie)

## 7.2 Test de significativité
cor.test(sel$pib_hab,sel$esp_vie)

## 7.3 Régression
modreg<-lm(esp_vie~pib_hab,data=sel)
summary(modreg)

## 7.4 Graphique + droite de régression


plot(sel$pib_hab,sel$esp_vie,
     xlab = "X : PIB par habitant",
     ylab = "Y : Espérance de vie",
     main = "Relation entre X et Y",
     pch=20,
     col="red")

text(sel$pib_hab,sel$esp_vie,sel$region,
     cex=0.4,
     col="blue",
     pos=1)

grid()

abline(modreg, col="black",lwd=2)
    country      region   pop pib_hab esp_vie
346 Nigeria   Akwa Ibom  4533    4510    58.6
347 Nigeria     Anambra  6810    9550    61.8
348 Nigeria      Bauchi  8381    2520    48.5
349 Nigeria         Edo  3171    8160    55.2
350 Nigeria       Benue  6093    3160    60.6
351 Nigeria       Borno  7841    3920    53.4
352 Nigeria Cross River  2736    3250    55.6
353 Nigeria     Adamawa  4753    2990    59.7
354 Nigeria         Imo  4946    7650    61.0
355 Nigeria      Kaduna 12361    5470    50.0
356 Nigeria        Kano 15394    4140    48.3
357 Nigeria     Katsina 13204    2650    49.4
358 Nigeria       Kwara  3781    5530    60.3
359 Nigeria       Lagos 13067    9370    66.8
360 Nigeria       Niger  7398    4770    59.6
361 Nigeria        Ogun  4622    4830    55.7
362 Nigeria        Ondo  3455    4250    60.3
363 Nigeria         Oyo  7133    4710    59.4
364 Nigeria     Plateau  4578    3380    55.9
365 Nigeria      Rivers  6759    6500    50.8
366 Nigeria      Sokoto  5501    2650    47.8
367 Nigeria        Abia  3105    5960    57.3
368 Nigeria       Delta  4952    6300    55.3
369 Nigeria       Enugu  3991    6870    64.4
370 Nigeria      Jigawa  8001    2330    47.2
371 Nigeria       Kebbi  6078    2680    47.2
372 Nigeria        Kogi  3005    4640    61.0
373 Nigeria        Osun  4683    5290    60.3
374 Nigeria      Taraba  4565    2570    59.1
375 Nigeria        Yobe  8053    2510    60.9
376 Nigeria     Bayelsa  1748    4170    52.2
377 Nigeria      Ebonyi  4950    7140    65.3
378 Nigeria       Ekiti  2454    4320    59.4
379 Nigeria       Gombe  4192    3060    55.6
380 Nigeria   Nassarawa  3361    3980    57.7
381 Nigeria     Zamfora  7380    2850    51.3
382 Nigeria   Abuja FCT  1501    8620    63.0
[1] 218536000
      pop           pib_hab        esp_vie     
 Min.   : 1501   Min.   :2330   Min.   :47.20  
 1st Qu.: 3781   1st Qu.:3060   1st Qu.:52.20  
 Median : 4946   Median :4320   Median :57.70  
 Mean   : 5906   Mean   :4791   Mean   :56.65  
 3rd Qu.: 7380   3rd Qu.:5960   3rd Qu.:60.30  
 Max.   :15394   Max.   :9550   Max.   :66.80  

[1] 0.5468234

    Pearson's product-moment correlation

data:  sel$pib_hab and sel$esp_vie
t = 3.8639, df = 35, p-value = 0.0004619
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.2707818 0.7397692
sample estimates:
      cor 
0.5468234 

Call:
lm(formula = esp_vie ~ pib_hab, data = sel)

Residuals:
   Min     1Q Median     3Q    Max 
-8.318 -3.549  1.182  3.434  7.552 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 4.972e+01  1.945e+00  25.559  < 2e-16 ***
pib_hab     1.446e-03  3.743e-04   3.864 0.000462 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 4.589 on 35 degrees of freedom
Multiple R-squared:  0.299, Adjusted R-squared:  0.279 
F-statistic: 14.93 on 1 and 35 DF,  p-value: 0.0004619

Changement de niveau

On peut également charger un fichier de niveau supérieur où les données sont au niveau des pays plutôt que des entités infra-nationales. On remplace juste le nom des régions par le code iso des pays

# ETAPE1 : préparation des données

## 1.1 Importation du tableau
don <- read.table(file = "data/africa_GDL/data/don_sta_2022.csv",
                  header= TRUE,
                  dec=",",
                  sep =";")



## 1.3 Sélection des variables
sel <-don[, c("country","iso_code","pop","pib_hab","esp_vie")]

sel

## ETAPE 2 : Somme des populations

sum(sel$pop)*1000

## ETAPE 3 : Paramètres principaux
summary(sel[,c("pop","pib_hab","esp_vie")])

## ETAPE 4 :Histogramme de X

X<- sel$pib_hab
hist(X, 
     main="Histogramme",
     breaks = quantile(X,probs = c(0,0.25,0.5,0.75,1)),
     ylab= "Densité",
     xlab = "X = PIB par habitant",
     probability = T,
     col= "lightyellow",
      )

rug(X, 
    col="blue",
    lwd=3)

lines(density(X, bw=sd(X)/2),
      col="red",
      lwd=2,
      )

## ETAPE 5 : Histogramme de Y

Y <- sel$esp_vie
hist(Y, 
     main="Histogramme",
     breaks = quantile(Y,probs = c(0,0.25,0.5,0.75,1)),
     ylab= "Densité",
     xlab = "Y = Espérance de vie",
     probability = T,
     col= "lightyellow",
      )

rug(Y, 
    col="blue",
    lwd=3)

lines(density(Y, bw=sd(Y)/2),
      col="red",
      lwd=2,
      )

## ETAPE 6 : Relation entre X et Y 

plot(sel$pib_hab,sel$esp_vie,
     xlab = "X : PIB par habitant",
     ylab = "Y : Espérance de vie",
     main = "Relation entre X et Y",
     pch=20,
     col="red")
text(sel$pib_hab,sel$esp_vie,sel$iso_code,
     cex=0.4,
     col="blue",
     pos=1)



## ETAPE 7 : Test de la relation entre X et Y

## 7.1 Corrélation
cor(sel$pib_hab,sel$esp_vie)

## 7.2 Test de significativité
cor.test(sel$pib_hab,sel$esp_vie)

## 7.3 Régression
modreg<-lm(esp_vie~pib_hab,data=sel)
summary(modreg)

## 7.4 Graphique + droite de régression


plot(sel$pib_hab,sel$esp_vie,
     xlab = "X : PIB par habitant",
     ylab = "Y : Espérance de vie",
     main = "Relation entre X et Y",
     pch=20,
     col="red")

text(sel$pib_hab,sel$esp_vie,sel$iso_code,
     cex=0.4,
     col="blue",
     pos=1)

grid()

abline(modreg, col="black",lwd=2)
                        country iso_code    pop pib_hab esp_vie
1                        Angola      AGO  35589    5330    61.9
2                       Burundi      BDI  12890     710    62.0
3                         Benin      BEN  13353    3410    60.0
4                  Burkina Faso      BFA  22674    2040    59.8
5                      Botswana      BWA   2630   14840    65.9
6  Central African Republic CAR      CAF   5579     870    54.5
7                 Cote d'Ivoire      CIV  28161    5380    58.9
8                      Cameroon      CMR  27915    3680    61.0
9     Congo Democratic Republic      COD  99010    1080    59.7
10            Congo Brazzaville      COG   5970    2900    63.1
11                      Comoros      COM    837    3260    63.7
12                   Cape Verde      CPV    593    7600    74.7
13                     Djibouti      DJI   1121    4870    62.9
14                      Algeria      DZA  44903   10980    77.1
15                        Egypt      EGY 110990   12360    70.2
16                      Eritrea      ERI   3684    1960    66.6
17                     Ethiopia      ETH 123380    2370    65.6
18                        Gabon      GAB   2389   11190    65.7
19                        Ghana      GHA  33476    5380    63.9
20                       Guinea      GIN  13859    2400    59.0
21                       Gambia      GMB   2706    2090    62.9
22                Guinea Bissau      GNB   2106    1880    59.9
23            Equatorial Guinea      GNQ   1675   10660    61.2
24                        Kenya      KEN  54027    4810    62.1
25                      Liberia      LBR   5303    1330    61.1
26                        Libya      LBY   6812   19750    72.2
27                      Lesotho      LSO   2306    2710    53.0
28                      Morocco      MAR  37458    7950    75.0
29                   Madagascar      MDG  29612    1460    65.2
30                         Mali      MLI  22594    2040    59.4
31                   Mozambique      MOZ  32970    1220    59.6
32                   Mauritania      MRT   4736    5340    64.7
33                    Mauritius      MUS   1263   23250    74.0
34                       Malawi      MWI  20405    1430    62.9
35                      Namibia      NAM   2567    9200    58.1
36                        Niger      NER  26208    1280    62.1
37                      Nigeria      NGA 218541    4750    53.6
38                       Rwanda      RWA  13777    2320    67.1
39                        Sudan      SDN  46874    3510    65.6
40                      Senegal      SEN  17316    3460    67.9
41                 Sierra Leone      SLE   8606    1610    60.4
42                      Somalia      SOM  17598    1350    54.4
43                  South Sudan      SSD  10913     690    55.6
44          Sao Tome & Principe      STP    227    4050    68.8
45                     Eswatini      SWZ   1202    8390    56.4
46                         Chad      TCD  17723    1390    53.0
47                         Togo      TGO   8849    2210    61.6
48                      Tunisia      TUN  12356   10300    74.3
49                     Tanzania      TZA  65498    2580    66.8
50                       Uganda      UGA  47250    2240    63.6
51                 South Africa      ZAF  59894   13190    61.5
52                       Zambia      ZMB  20018    3160    61.8
53                     Zimbabwe      ZWE  16321    2080    59.4
[1] 1424714000
      pop            pib_hab         esp_vie     
 Min.   :   227   Min.   :  690   Min.   :53.00  
 1st Qu.:  3684   1st Qu.: 1960   1st Qu.:59.70  
 Median : 13859   Median : 3160   Median :62.10  
 Mean   : 26881   Mean   : 5024   Mean   :63.05  
 3rd Qu.: 32970   3rd Qu.: 5380   3rd Qu.:65.70  
 Max.   :218541   Max.   :23250   Max.   :77.10  

[1] 0.5410111

    Pearson's product-moment correlation

data:  sel$pib_hab and sel$esp_vie
t = 4.594, df = 51, p-value = 2.883e-05
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.3170853 0.7078017
sample estimates:
      cor 
0.5410111 

Call:
lm(formula = esp_vie ~ pib_hab, data = sel)

Residuals:
    Min      1Q  Median      3Q     Max 
-9.2718 -2.0244 -0.1578  2.3155 10.2884 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 5.987e+01  9.607e-01  62.314  < 2e-16 ***
pib_hab     6.324e-04  1.377e-04   4.594 2.88e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 4.855 on 51 degrees of freedom
Multiple R-squared:  0.2927,    Adjusted R-squared:  0.2788 
F-statistic:  21.1 on 1 and 51 DF,  p-value: 2.883e-05